package com.agnes.okhttp.lib.util;

import android.util.Log;

import com.agnes.okhttp.lib.NetConst;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.Iterator;

public class Utils {

    /**
     * 根据项目接口返回格式不统一，包装成统一的数据格式
     *
     * @param response 返回的字符串
     * @throws JSONException
     */
    public static JSONObject toStandard(String response, int emptyFlag) throws JSONException {
        JSONObject oldJO = JsonUtils.parseJO(response);
        JSONObject newRootJO = new JSONObject();
        // 1、生成code
        for (String key : NetConst.CODE_KEY) {
            if (oldJO.has(key)) {
                int code = oldJO.optInt(key);
                oldJO.remove(key);
                newRootJO.put(NetConst.CODE, code);
                break;
            }
        }
        if (!newRootJO.has(NetConst.CODE)) {
            newRootJO.put(NetConst.CODE, NetConst.CODE_EMPTY);
        }

        // 2、生成 message
        for (String key : NetConst.MSG_KEY) {
            if (oldJO.has(key)) {
                String msg = oldJO.optString(key);
                oldJO.remove(key);
                newRootJO.put(NetConst.MESSAGE, msg);
                break;
            }
        }
        if (!newRootJO.has(NetConst.MESSAGE)) {
            newRootJO.put(NetConst.MESSAGE, "");
        }
        Log.e("TAG", oldJO.toString());
        Log.e("TAG", newRootJO.toString());

        // 3、将剩余部分生成 data
        int rootJoLen = oldJO.length();
        if (rootJoLen == 0) {
            // 处理没有data 的情况
            if (emptyFlag == NetConst.FLAG_JO) {
                newRootJO.put(NetConst.DATA, new JSONObject());
            } else if (emptyFlag == NetConst.FLAG_JA) {
                newRootJO.put(NetConst.DATA, new JSONArray());
            }
        } else if (rootJoLen == 1) {
            String key = oldJO.keys().next();
            Object value = oldJO.opt(key);
            if (value instanceof JSONObject || value instanceof JSONArray) {
                newRootJO.put(NetConst.DATA, value);
            } else {
                JSONObject dataJo = new JSONObject();
                dataJo.put(key, value);
                newRootJO.put(NetConst.DATA, dataJo);
            }

        } else {
            JSONObject dataJo = new JSONObject();

            Iterator<String> keyI = oldJO.keys();
            while (keyI.hasNext()) {
                String key = keyI.next();
                Object value = oldJO.opt(key);
                dataJo.put(key, value);
            }
            newRootJO.put(NetConst.DATA, dataJo);
        }

        return newRootJO;
    }


}
